/**
 * 登录验证相关工具函数
 */

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export const isLoggedIn = () => {
  try {
    const token = uni.getStorageSync('token')
    const userInfo = uni.getStorageSync('user_info')
    
    // 检查token和userInfo是否存在，token可能在userInfo.token或者单独存储
    return !!(token && userInfo)
  } catch (e) {
    console.error('检查登录状态失败:', e)
    return false
  }
}

/**
 * 获取当前用户信息
 * @returns {Object|null} 用户信息对象或null
 */
export const getCurrentUser = () => {
  try {
    const userInfo = uni.getStorageSync('user_info')
    return userInfo || null
  } catch (e) {
    console.error('获取用户信息失败:', e)
    return null
  }
}

/**
 * 获取当前用户token
 * @returns {string} token字符串
 */
export const getToken = () => {
  try {
    // 优先从单独存储的token中获取
    const token = uni.getStorageSync('token')
    if (token) {
      return token
    }
    
    // 如果没有，尝试从用户信息中获取
    const userInfo = getCurrentUser()
    return userInfo?.token || ''
  } catch (e) {
    console.error('获取token失败:', e)
    return ''
  }
}

/**
 * 清除登录信息
 */
export const clearLoginInfo = () => {
  try {
    uni.removeStorageSync('token')
    uni.removeStorageSync('user_info')
  } catch (e) {
    console.error('清除登录信息失败:', e)
  }
}

/**
 * 跳转到登录页面
 * @param {string} redirectUrl 登录成功后的重定向地址
 */
export const goToLogin = (redirectUrl = '') => {
  const url = redirectUrl ? `/pages/login/login?redirect=${encodeURIComponent(redirectUrl)}` : '/pages/login/login'
  uni.navigateTo({
    url,
    fail: (err) => {
      console.error('跳转登录页失败:', err)
      // 如果navigateTo失败，尝试使用reLaunch
      uni.reLaunch({
        url: '/pages/login/login'
      })
    }
  })
}

/**
 * 检查登录状态，未登录则跳转到登录页
 * @param {string} redirectUrl 登录成功后的重定向地址
 * @returns {boolean} 是否已登录
 */
export const requireLogin = (redirectUrl = '') => {
  if (!isLoggedIn()) {
    uni.showModal({
      title: '提示',
      content: '请先登录',
      confirmText: '去登录',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          goToLogin(redirectUrl)
        }
      }
    })
    return false
  }
  return true
}

/**
 * 保存登录信息
 * @param {Object} userInfo 用户信息
 * @param {string} token 用户token
 */
export const saveLoginInfo = (userInfo, token = '') => {
  try {
    // 确定最终的token值
    const finalToken = token || userInfo.token || ''
    
    // 保存用户信息
    uni.setStorageSync('user_info', userInfo)
    
    // 单独保存token，确保token始终可用
    if (finalToken) {
      uni.setStorageSync('token', finalToken)
    }
    
    console.log('保存登录信息成功:', {
      hasUserInfo: !!userInfo,
      hasToken: !!finalToken,
      userId: userInfo?.user_id || userInfo?.id
    })
  } catch (e) {
    console.error('保存登录信息失败:', e)
  }
}

/**
 * 登录过期处理
 */
export const handleLoginExpired = () => {
  clearLoginInfo()
  
  uni.showModal({
    title: '登录过期',
    content: '您的登录已过期，请重新登录',
    confirmText: '去登录',
    showCancel: false,
    success: (res) => {
      if (res.confirm) {
        goToLogin()
      }
    }
  })
}

export default {
  isLoggedIn,
  getCurrentUser,
  getToken,
  clearLoginInfo,
  goToLogin,
  requireLogin,
  saveLoginInfo,
  handleLoginExpired
}